/**
 * @file       LCDFactory.h
 * @brief      LCD Factory,provide a simple same way to generate the LCD device object
 * @author     Huabo Zheng
 * @date       Jan 20, 2012
 * @Copyright  2012, www.netgear.com Inc. All rights reserved.
 */

#ifndef LCDFACTORY_H_
#define LCDFACTORY_H_
#include "SafeSingleton.h"

namespace NS_LCD_AFW
{

class IDisplay;
class IInput;


/**
 *@class  CLCDFactory
 *@brief Provide a simple same way to generate the LCD device object
 */
class CLCDFactory
{
public:

	/**
	 *@brief Constructor
	 */
	CLCDFactory();

	/**
	*@brief Destructor
	*/
	virtual ~CLCDFactory();
public:

	/**
	 *@brief Create an output device
	 *@details Create an output device
	 *@param[in] type The Equipment Type
	 *@exception none
	 *@retval    IDisplay *
	 *@return    A pointer to a IDisplay object, or NULL if failed
	 *@note
	 *@attention
	 *@see
	*/
	IDisplay *createDisplayDevice(int type);

	/**
	 *@brief Create an input device
	 *@details Create an input device
	 *@param[in] type The Input Equipment Type
	 *@exception none
	 *@retval    IInput *
	 *@return    A pointer to a IInput object, or NULL if failed
	 *@note
	 *@attention
	 *@see
	*/
	IInput   *createInputDevice(int type);

};

/**
 *@def AfwGetLCDFactory()
*@brief Get the LCD factory object instance
*/
#define AfwGetLCDFactory()         (&(CSafeSingleton<CLCDFactory>::getInstance()))
} /* namespace NS_LCD_AFW */
#endif /* LCDFACTORY_H_ */
